
#ifndef _PLANE_H_
#define _PLANE_H_


#include "vec3.h"


namespace math
{

///////////////////////////////////////////////////////
///	\brief	Plane routines curtesy of Tim Schroeder
///////////////////////////////////////////////////////
class Plane
{
public:
	Vec3		m_Normal;
	float		m_D;

				Plane();
				Plane(float x, float y, float z, float w);
				~Plane();
	bool		RayPlane(const Vec3& _vFrom, const Vec3& _vDir, Vec3& _vIntersect) const;
	void		PlaneFromPoint(const Vec3& _vPoint, const Vec3& _vNormal);
	void		PlaneFromPoints(const Vec3& A, const Vec3& B, const Vec3& C);
	bool		Front(const Vec3& _vPoint) const;
	Plane		operator=(const  Plane &A);				// Copy

	Vec3		GetRight() const;
	const Vec3&	GetUp() const;
	Vec3		GetForward() const;
};
	
} // end namespace math

#endif // _PLANE_H_
